Skip to main content

Exec Family

Isan [IP]
Isan [IP]Netlab Assistant 2024/2025

Tujuan Praktikum

  1. Memahami konsep exec function dalam system programming
  2. Memahami pemanggilan exec family
  3. Memahami jenis - jenis exec family
  4. Memahami perbedaan exec dengan fork

Exec Function

Exec function dalam system programming digunakan untuk menjalankan program lain dalam lingkungan proses yang sama, menggantikan proses yang sedang berjalan dengan proses baru. Fungsi ini sering digunakan dalam sistem berbasis Unix/Linux dan tersedia dalam library unistd.h pada bahasa C.

Saat fungsi exec dipanggil, proses yang sedang berjalan akan dihentikan dan digantikan oleh program yang baru. Jika fungsi exec berhasil dijalankan, kode setelah pemanggilan exec tidak akan pernah dieksekusi karena proses saat ini telah digantikan oleh program baru. Namun, jika terjadi kesalahan, fungsi exec akan mengembalikan nilai -1.

Jenis - jenis Exec

  1. execl
  2. execv
  3. execvp
  4. execle
  5. execlp
  6. execve

execl()

Menjalankan program dengan daftar argumen yang diberikan satu per satu (berakhir dengan NULL).

#include <stdio.h>
#include <unistd.h>

int main() {
printf("Sebelum exec\n");
execl("/bin/ls", "ls", "-l", NULL);
printf("Kode ini tidak akan pernah dieksekusi jika exec berhasil\n");
return 0;
}

execv()

execv() menggunakan array dari string untuk memberikan argumen.

#include <stdio.h>
#include <unistd.h>

int main() {
printf("Sebelum execv\n");
char *args[] = {"/bin/ls", "-l", NULL};
execv(args[0], args);
printf("Kode ini tidak akan pernah dieksekusi jika exec berhasil\n");
return 0;
}

execvp()

execvp() mirip dengan execv(). Akan tetapi, execvp() akan mencari program dalam PATH, sehingga kita tidak perlu memberikan path absolut.

#include <stdio.h>
#include <unistd.h>

int main() {
printf("Sebelum execvp\n");
char *args[] = {"ls", "-l", NULL};
execvp("ls", args);
printf("Kode ini tidak akan pernah dieksekusi jika exec berhasil\n");
return 0;
}

execle()

execle() mirip dengan execl(). Akan tetapi, pada execle() kita dapat mengatur environtment variable sendiri.

#include <stdio.h>
#include <unistd.h>

int main() {
printf("Sebelum execle\n");
char *envp[] = {"MY_VAR=HelloWorld", NULL};
execle("/bin/ls", "ls", "-l", NULL, envp);
printf("Kode ini tidak akan pernah dieksekusi jika exec berhasil\n");
return 0;
}